/****************************************************************************************
*            . .. .                                                                     *
*                    ...                                                                *
*                       .":                                                             *
*   .                      u                                                            *
* ..     .:uxkkOkkx=.      "k'                                                          *
*.     "k00O0ko==uk00x'     OO.                       IBE-CAE                           *
*'   .xK0O00: 'xx" x0Ku    .O0:     Copyright (C) by Internet Based Engineering         *
*   .O0OO00= oKOk:"O0O'    :00=                 All rights reserved.                    *
*.  =0OOO00" =OOO0Oo'     =0OO:                      www.ibe.cn                         *
*.  u0OOOO0O'          .o00OOO.                                                         *
* . :KOOOOO00xu=:::=uok00OOOO"                                                          *
*   .x00OOOOOO0000000OOOOOOx.                                                           *
*    .u00OOOOOOOOOOOOOOOOO=                                                             *
*      .ukOOOOOOOOOOOOku'                                                               *
*          .'::==::'.                                                                   *
****************************************************************************************/

#ifndef IBE_CASES_H_
#define IBE_CASES_H_

#include <vector>

#include "IBE_Object.h"

namespace ibe_common
{
    class IBE_Case;

    /**
    * @class IBE_Cases
    * @brief 存储所有分析步数据信息
    * @author liupeng
    */
    class IBE_COMMON_EXPORT IBE_Cases : public IBE_Object
    {
    public:
        explicit IBE_Cases();
        ~IBE_Cases();

        IBE_TypeMacro( ibe_common, IBE_Cases, ibe_common, IBE_Object );

        virtual void Initialize() override;
        /**
         * @brief 移除所有分析步内容（不delete分析步内容）
         */
        virtual void ClearAllCases();
        /**
         * @brief 移除所有分析步内容（会delete分析步内容）
         */
        virtual void DeleteAllCases();

        //@{
        /**
         * @brief 添加分析步信息
         *
         * @param caseInfo 单个分析步
         */
        virtual void AddCase( IBE_Case* caseInfo );
        /**
         * @brief 移除分析步信息（没有delete内容）
         *
         * @param caseInfo 单个分析步
         * @param index 单个分析步索引
         */
        virtual void RemoveCase( IBE_Case* caseInfo );
        virtual void RemoveCase( const int index );
        /**
         * @brief 移除分析步信息（会delete内容）
         *
         * @param caseInfo 单个分析步
         */
        virtual void DeleteCase( IBE_Case* caseInfo );
        virtual void DeleteCase( const int index );
        /**
         * @brief 获取分析步索引
         *
         * @param caseInfo 单个分析步
         * @return 分析步索引
         */
        virtual int GetCaseIndex( IBE_Case* caseInfo );
        /**
         * @brief 通过分析步索引，获取对应的分析步信息
         *
         * @param index 分析步索引
         * @return 分析步信息
         */
        virtual IBE_Case* GetCase( const int index );
        /**
         * @brief 获取分析步个数
         *
         * @return 分析步个数
         */
        virtual int GetNumberOfCases();
        //@}

        virtual void Copy( ibe_common::IBE_Object* obj ) override;

    protected:
        //! 存储所有的分析步信息
        std::vector<IBE_Case*> caseInfos_;

    private:
        IBE_Cases( const IBE_Cases& ) = delete;
        IBE_Cases& operator=( const IBE_Cases& ) = delete;
    };
} // namespace ibe_common

#endif // IBE_CASES_H_